#include <QCoreApplication>   //通过建立子函数，来实现连续打印斐波那契数列
#include <iostream>
#include <functional>

std::function<int(int)>fbc();  // 这里是声明函数fbc（描述类型）,其不占用内存（不分配内存）
int main(int argc, char *argv[])
{
//  auto d = fbc();
    auto max = 8;
    for(auto i= 0; i < max; ++i){  //这里用++i比i++更节省内存
          std::cout << fbc()(i) << std::endl;  // 注意：这里如果
    }
    return 0;
}

std::function<int(int)>fbc()   // 这里是定义函数fab,其占用内存（分配内存）
{
    static std::function<int(int)>fab; //这里只是声明了fab，就是告诉后面fab是function类型，之所以要静态处理，是防止被释放了！             
    fab = [](int i){     // fab是属于函数fbc的静态参数（参数可以是函数），可以被下面的lambda表达式捕获!
                         // 其实这里fab没有定义，因为声明并定义了lambda表达式，这个算是定义，然后把lambda表达式的定义给了fab而已。
        if (i == 0){
            return i;
        }
        else if (i == 1){
            return i;
        }
            else {
            return fab(i - 1) + fab(i - 2);
        }
    };
    return fab;
}
